home *** CD-ROM | disk | FTP | other *** search
/ Sports Illustrated for Kids - Awesome Athletes! / Sports Illustrated for Kids - Awesome Athletes!.iso / shared.dir / 07000_History & State.ls next >
Encoding:
Text File  |  1996-04-18  |  5.2 KB  |  225 lines

  1. on HSInit
  2.   global gHSCount, cHSMaxHistory, gHSHistory, gHSState
  3.   set gHSCount to 0
  4.   set cHSMaxHistory to 25
  5.   set gHSHistory to []
  6.   set gHSState to [:]
  7. end
  8.  
  9. on HSLoad aName
  10.   global gSIHDPath, gHSCount, gHSHistory, gHSState
  11.   set vFile to FileIO(mnew, "read", gSIHDPath & "USER.DAT")
  12.   if not objectp(vFile) then
  13.     put "Duck=a"
  14.     return 
  15.   end if
  16.   set vDone to 0
  17.   set vTarget to "!" & aName
  18.   repeat while not vDone
  19.     set vTmp to vFile(mReadLine)
  20.     if not objectp(vFile) then
  21.       put "Duck=b"
  22.       exit
  23.     end if
  24.     set vTmp to stripCRLF(vTmp)
  25.     if vTmp = vTarget then
  26.       put "Duck=c"
  27.       set vDone to 1
  28.       next repeat
  29.     end if
  30.     if length(vTmp) = 0 then
  31.       exit repeat
  32.     end if
  33.   end repeat
  34.   if not vDone then
  35.     put "Duck=d"
  36.     vFile(mdispose)
  37.     exit
  38.   end if
  39.   set vTmp to vFile(mReadLine)
  40.   if objectp(vFile) then
  41.     set vTmp to stripCRLF(vTmp)
  42.     set gHSState to value(vTmp)
  43.     put "Duck=eb" && vTmp
  44.     put "Duck=ec" && gHSState && voidp(gHSState)
  45.     if voidp(gHSState) then
  46.       set gHSState to [:]
  47.     end if
  48.   else
  49.     put "Duck=f"
  50.     return 
  51.   end if
  52.   set vTmp to vFile(mReadLine)
  53.   if objectp(vFile) then
  54.     set vTmp to stripCRLF(vTmp)
  55.     set gHSHistory to value(vTmp)
  56.     if voidp(gHSHistory) then
  57.       set gHSHistory to []
  58.     end if
  59.     set gHSCount to count(gHSHistory)
  60.   else
  61.     return 
  62.   end if
  63.   if objectp(vFile) then
  64.     vFile(mdispose)
  65.   end if
  66. end
  67.  
  68. on HSSave aName
  69.   global gSIHDPath, gHSHistory, gHSState
  70.   set vSearch to 0
  71.   set vFoundIt to 0
  72.   set vOutFile to FileIO(mnew, "write", gSIHDPath & "USER.BAK")
  73.   if objectp(vFile) then
  74.     exit
  75.   end if
  76.   set vFile to FileIO(mnew, "read", gSIHDPath & "USER.DAT")
  77.   if objectp(vFile) then
  78.     set vSearch to 1
  79.   end if
  80.   set vTmp to "!" & aName & RETURN
  81.   if objectp(vOutFile) then
  82.     vOutFile(mWriteString, vTmp)
  83.   end if
  84.   set vTmp to string(gHSState) & RETURN
  85.   if objectp(vOutFile) then
  86.     vOutFile(mWriteString, vTmp)
  87.   end if
  88.   set vTmp to string([]) & RETURN
  89.   if objectp(vOutFile) then
  90.     vOutFile(mWriteString, vTmp)
  91.   end if
  92.   set vTmp to "[END]" & RETURN
  93.   if objectp(vOutFile) then
  94.     vOutFile(mWriteString, vTmp)
  95.   end if
  96.   set vTarget to "!" & aName
  97.   set vDone to 0
  98.   if objectp(vFile) then
  99.     repeat while not vDone
  100.       set vTmp to vFile(mReadLine)
  101.       if objectp(vFile) then
  102.         set vTmp to stripCRLF(vTmp)
  103.         if length(vTmp) = 0 then
  104.           set vDone to 1
  105.         else
  106.           if vTmp = vTarget then
  107.             set vFoundIt to 1
  108.             set vDone to 1
  109.           else
  110.             set vTmp to vTmp & RETURN
  111.             if objectp(vOutFile) then
  112.               vOutFile(mWriteString, vTmp)
  113.             end if
  114.           end if
  115.         end if
  116.         next repeat
  117.       end if
  118.       set vDone to 1
  119.     end repeat
  120.     if vFoundIt then
  121.       set vDone to 0
  122.       set vTarget to "[END]"
  123.       repeat while not vDone
  124.         set vTmp to vFile(mReadLine)
  125.         if objectp(vFile) then
  126.           set vTmp to stripCRLF(vTmp)
  127.           if length(vTmp) = 0 then
  128.             set vDone to 1
  129.           else
  130.             if vTmp = vTarget then
  131.               set vDone to 1
  132.             end if
  133.           end if
  134.           next repeat
  135.         end if
  136.         set vDone to 1
  137.       end repeat
  138.     end if
  139.     repeat while objectp(vFile)
  140.       set vTmp to vFile(mReadLine)
  141.       put "Duck <" & vTmp & ">"
  142.       if objectp(vFile) and (length(vTmp) > 0) then
  143.         put "Duck2"
  144.         set vTmp to stripCRLF(vTmp)
  145.         set vTmp to vTmp & RETURN
  146.         if objectp(vOutFile) then
  147.           vOutFile(mWriteString, vTmp)
  148.         end if
  149.         next repeat
  150.       end if
  151.       put "Duck3"
  152.       exit repeat
  153.     end repeat
  154.   end if
  155.   set vTmp to "[END]" & RETURN
  156.   if objectp(vOutFile) then
  157.     vOutFile(mWriteString, vTmp)
  158.   end if
  159.   if objectp(vFile) then
  160.     vFile(mdispose)
  161.   end if
  162.   if objectp(vOutFile) then
  163.     vOutFile(mdispose)
  164.   end if
  165.   gSIMiscX(mCopyFile, gSIHDPath & "USER.BAK", gSIHDPath & "USER.DAT")
  166. end
  167.  
  168. on HSHistPush aModule, aDescription
  169.   global gHSCount, gHSHistory, gHSState, cHSMaxHistory
  170.   if gHSCount = cHSMaxHistory then
  171.     deleteAt(gHSHistory, gHSCount)
  172.     set gHSCount to gHSCount - 1
  173.   end if
  174.   set vState to getaProp(gHSState, aModule)
  175.   set vHist to [aModule, aDescription, string(vState)]
  176.   add(gHSHistory, vHist)
  177.   set gHSCount to gHSCount + 1
  178. end
  179.  
  180. on HSHistPop
  181.   global gHSCount, gHSHistory, gHSState
  182.   if gHSCount = 0 then
  183.     return []
  184.   end if
  185.   set vHist to getAt(gHSHistory, gHSCount)
  186.   deleteAt(gHSHistory, gHSCount)
  187.   set gHSCount to gHSCount - 1
  188.   set vModule to getAt(vHist, 1)
  189.   set vState to value(getAt(vHist, 3))
  190.   setaProp(gHSState, vModule, vState)
  191.   return vModule
  192. end
  193.  
  194. on HSHistList
  195.   global gHSCount, gHSHistory
  196.   if gHSCount = 0 then
  197.     return []
  198.   end if
  199.   set vRetList to []
  200.   repeat with I = gHSCount down to 1
  201.     add(vRetList, getAt(getAt(gHSHistory, I), 2))
  202.   end repeat
  203.   return vRetList
  204. end
  205.  
  206. on HSStatePut aModule, aKey, aValue
  207.   global gHSState
  208.   set vCurrState to getaProp(gHSState, aModule)
  209.   if not listp(vCurrState) then
  210.     set vCurrState to [:]
  211.   end if
  212.   setaProp(vCurrState, aKey, aValue)
  213.   setaProp(gHSState, aModule, vCurrState)
  214. end
  215.  
  216. on HSStateGet aModule, aKey
  217.   global gHSState
  218.   set vCurrState to getaProp(gHSState, aModule)
  219.   if listp(vCurrState) then
  220.     return getaProp(vCurrState, aKey)
  221.   else
  222.     return EMPTY
  223.   end if
  224. end
  225.